﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using VentaElectrodomesticos.GUI.Base;
using VentaElectrodomesticos.Contrato;
using VentaElectrodomesticos.Datos;
using VentaElectrodomesticos.Negocio;

namespace VentaElectrodomesticos.GUI.AbmCliente
{
    public partial class FormCliente : BaseEdicion<ClienteNegocio, ClienteDAO, Cliente>
    {
        static FormCliente instance;

        public static FormCliente getInstance()
        {
            if (instance == null)
            {
                instance = new FormCliente();
            }
            instance.BringToFront();
            return instance;
        }

        public FormCliente()
        {
            InitializeComponent();
        }

        protected override void getValues()
        {
            this.Entity.Nombre = tbNombre.Text;
            this.Entity.Apellido = tbApellido.Text;
            this.Entity.Dni = tbDNI.Text;
            this.Entity.Email = tbEmail.Text;
            this.Entity.Telefono = tbTelefono.Text;
            this.Entity.Direccion = tbDireccion.Text;
            this.Entity.Provincia_id = Convert.ToInt32(cbProvincia.SelectedValue);
            this.Entity.inactivo = this.checkInactivo.Checked;
        }

        protected override void setValues()
        {
            this.tbApellido.Text = this.Entity.Apellido;
            this.tbNombre.Text = this.Entity.Nombre;
            this.tbDNI.Text = this.Entity.Dni;
            this.tbEmail.Text = this.Entity.Email;
            this.tbTelefono.Text = this.Entity.Telefono;
            this.tbDireccion.Text = this.Entity.Direccion;
            if (this.Entity.Provincia_id != null) {
                this.cbProvincia.SelectedValue = this.Entity.Provincia_id;
            }
            if (this.Entity.inactivo == null)
            {
                this.Entity.inactivo = false;
            }
            this.checkInactivo.Checked = (Boolean)this.Entity.inactivo;
        }        

        public void setProvincias(List<Provincia> provincias)
        {
            this.cbProvincia.DataSource = provincias;
            this.cbProvincia.DisplayMember = "nombre";
            this.cbProvincia.ValueMember = "Id";
        }

        protected override void OnClosed(EventArgs e)
        {
            instance = null;
            base.OnClosed(e);
        }

        protected override void cumpleValidaciones()
        {
            if (!RegCondition.Condition(tbApellido, RegCondition.RegularExpressions.Alphabet))
                this.Errores.Add("El apellido no es válido");
            if (!RegCondition.Condition(tbDireccion, RegCondition.RegularExpressions.Address))
                this.Errores.Add("La dirección no es válida");
            if (!RegCondition.Condition(tbDNI, RegCondition.RegularExpressions.Numeric))
                this.Errores.Add("El DNI debe tener formato numerico, sin puntos");
            if (tbDNI.Text == string.Empty)
                this.Errores.Add("El DNI no puede ser vacío");
            if (!RegCondition.Condition(tbEmail, RegCondition.RegularExpressions.eMail))
                this.Errores.Add("El email no es válido");
            if (!RegCondition.Condition(tbTelefono, RegCondition.RegularExpressions.Telephone) || (!RegCondition.Condition(tbTelefono, RegCondition.RegularExpressions.Numeric) && tbTelefono.Text.Length >= 4))
                this.Errores.Add("El teléfono no es válido");
        }


        public override void changeLayout(bool edit)
        {
            base.changeLayout(edit);
            panelCreate.Visible = !edit ;
            checkInactivo.Visible = lbInactivo.Visible =  edit;
        }
    }
}
